package com.wlk.utils;

import com.wlk.pojo.dto.CodeAnalysisDTO;

public class CodeAnalysisUtil {

    /**
     * 解析部门/项目代码以获取级次和父节点信息
     * @param code 部门/项目代码
     * @param maxLevel 最大级次
     * @return CodeAnalysisDTO 对象包含级次和父节点信息
     */
    public static CodeAnalysisDTO analyzeCode(String code, Integer maxLevel) {
        // 如果代码为空返回错误的DTO
        if (code == null || code.trim().isEmpty()) {
            return new CodeAnalysisDTO(-1, -1);
        }
        // 去除代码的空白字符
        code = code.trim();

        // 验证代码是否只包含数字
        if (!code.matches("\\d+")) {
            return new CodeAnalysisDTO(-1, -1);
        }

        // 获取代码的长度
        int length = code.trim().length();

        // 验证代码长度是否超过最大级次允许的长度
        int maxLength = 3 + (maxLevel - 1) * 2;
        if (length > maxLength) {
            return new CodeAnalysisDTO(-1, -1);
        }

        // 验证代码格式，顶级节点长度为3，之后每级增加2
        if (length == 3) {
            return new CodeAnalysisDTO(1, -1);
        }

        if ((length - 3) % 2 != 0) {
            throw new IllegalArgumentException("不符合代码格式规则");
        }

        // 计算级次
        int level = (length - 3) / 2 + 1;

        // 获取父节点代码
        String parent = code.substring(0, length - 2);

        return new CodeAnalysisDTO(level, parent);
    }
}
